{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "# 线性回归演示\n",
    "&nbsp;&nbsp;&nbsp;&nbsp; 如何根据一个人的身高估算一个人的体重？在网上搜索会有各种答案：    \n",
    "有直接相减的：    \n",
    "&nbsp;&nbsp;&nbsp;&nbsp;    体重（kg）= [身高（cm）-110]      \n",
    "&nbsp;&nbsp;&nbsp;&nbsp;    体重（kg）= [身高（cm）-105]      \n",
    "&nbsp;&nbsp;&nbsp;&nbsp;    体重（kg）= [身高（cm）-100]    \n",
    "有乘以系数的：\n",
    "&nbsp;&nbsp;&nbsp;&nbsp;    体重（kg）=[身高（cm）-100]×0.9      \n",
    "&nbsp;&nbsp;&nbsp;&nbsp;    男性：体重 =（身高cm-80）×70%      \n",
    "&nbsp;&nbsp;&nbsp;&nbsp;    女性：体重 =（身高cm-70）×60%      \n",
    "&nbsp;&nbsp;&nbsp;&nbsp;    北方人：体重（kg）=[身高（cm）-150]×0.6+50       \n",
    "&nbsp;&nbsp;&nbsp;&nbsp;    南方人：体重（kg）=[身高（cm）-150]×0.6+48      \n",
    "这些公式基本上都是直线的公式 $ y = a + b x $形式的结构，那这些公式是科学家们咋计算出来的呢？  \n",
    "是根据一组组的数据反推出来的"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1.3854]\n",
      " [1.2213]\n",
      " [1.1009]\n",
      " [1.0655]\n",
      " [0.9503]]\n",
      "[[2.1332]\n",
      " [2.0162]\n",
      " [1.9138]\n",
      " [1.8621]\n",
      " [1.8016]]\n"
     ]
    }
   ],
   "source": [
    "x = [13854,12213,11009,10655,9503]\n",
    "x = np.reshape(x,newshape=(5,1)) / 10000.0\n",
    "y =  [21332, 20162, 19138, 18621, 18016]\n",
    "y = np.reshape(y,newshape=(5,1)) / 10000.0\n",
    "print(x)\n",
    "print(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x,y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据分析 Data Analysis\n",
    "看样子像一条直线"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 算法采用 Algorithm\n",
    "\n",
    "铁三角：\n",
    "\n",
    "模型 Model\n",
    "\n",
    "损失函数 Cost Function\n",
    "\n",
    "优化方法 Optimization Method \n",
    "\n",
    "模型 -> 损失函数 -> 优化方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def model(a, b, x):\n",
    "    return a*x + b\n",
    "\n",
    "def cost_function(a, b, x, y):\n",
    "    n = 5\n",
    "    return 0.5/n * (np.square(y-a*x-b)).sum()\n",
    "\n",
    "def optimize(a,b,x,y):\n",
    "    n = 5\n",
    "    alpha = 1e-1\n",
    "    y_hat = model(a,b,x)\n",
    "    da = (1.0/n) * ((y_hat-y)*x).sum()\n",
    "    db = (1.0/n) * ((y_hat-y).sum())\n",
    "    a = a - alpha*da\n",
    "    b = b - alpha*db\n",
    "    return a, b\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "初始化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = 0\n",
    "b = 0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "第一次遍历"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def iterate(a,b,x,y,times):\n",
    "    for i in range(times):\n",
    "        a,b = optimize(a,b,x,y)\n",
    "\n",
    "    y_hat=model(a,b,x)\n",
    "    cost = cost_function(a, b, x, y)\n",
    "    print(a,b,cost)\n",
    "    plt.scatter(x,y)\n",
    "    plt.plot(x,y_hat)\n",
    "    return a,b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.22441501579999998 0.19453800000000002 1.1195136204857177\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a,b = iterate(a,b,x,y,1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "继续遍历"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7678944854569089 0.6665363704212185 0.08000927296574874\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a,b = iterate(a,b,x,y,5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9501078460921074 0.8275889325111171 0.000808072467982241\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a,b = iterate(a,b,x,y,10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.9483311054752765 0.8580980023959833 0.0003466528413780967\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a,b = iterate(a,b,x,y,100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.8505560785076288 0.9710872023538262 0.00010710264569567503\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a,b = iterate(a,b,x,y,1000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7884707126333258 1.042833291685438 6.454779324956897e-05\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a,b = iterate(a,b,x,y,10000)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型评价\n",
    "计算R平方"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.06889736799999996, 0.06825272967982761, 0.0006454779324956859)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_hat=model(a,b,x)\n",
    "y_bar = y.mean()\n",
    "SST = np.square(y - y_bar).sum()\n",
    "SSR = np.square(y_hat - y_bar).sum()\n",
    "SSE = np.square(y_hat - y).sum()\n",
    "SST, SSR, SSE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[2.13518062],\n",
       "       [2.00579257],\n",
       "       [1.9108607 ],\n",
       "       [1.88294884],\n",
       "       [1.79211701]])"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_hat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.00198062],\n",
       "       [-0.01040743],\n",
       "       [-0.0029393 ],\n",
       "       [ 0.02084884],\n",
       "       [-0.00948299]])"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "y_hat-y"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "证明 SST=SSR+SSE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-8.396123233360073e-07"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "error = SST - SSR -SSE\n",
    "error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9906434985996512"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "R_Square = SSR/SST\n",
    "R_Square"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 附录1 损失函数的微分（可选）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "import sympy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = sympy.Symbol(\"a\")\n",
    "b = sympy.Symbol(\"b\")\n",
    "x = sympy.Symbol(\"x\")\n",
    "y = sympy.Symbol(\"y\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "f_cost = 1.0/2 * (y - a*x - b)**2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 0.5 \\left(- a x - b + y\\right)^{2}$"
      ],
      "text/plain": [
       "0.5*(-a*x - b + y)**2"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "f_cost"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle - 1.0 x \\left(- a x - b + y\\right)$"
      ],
      "text/plain": [
       "-1.0*x*(-a*x - b + y)"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sympy.diff(f_cost,a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/latex": [
       "$\\displaystyle 1.0 a x + 1.0 b - 1.0 y$"
      ],
      "text/plain": [
       "1.0*a*x + 1.0*b - 1.0*y"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "sympy.diff(f_cost,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "hide_input": false,
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
